home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu620.dms / pu620.adf / Utilities / STC4103.LHA / StoneCracker / sources / optidec.S < prev    next >
Text File  |  1994-01-04  |  3KB  |  171 lines

  1. ;-----------------------------------------------------------------------------
  2. ;- S404 highly optimized data decruncher v1.1 turbo
  3. ;- 27.11.93 by Marcus 'Cozine' Ottosson
  4. ;-----------------------------------------------------------------------------
  5. ;- Based on S404 data_decruncher v0.2
  6. ;- (c) 1993 by Jouni 'Mr.Spiv' Korhonen (SWSW)
  7. ;-----------------------------------------------------------------------------
  8. ;- call with registers: a0 = destination address
  9. ;-                      a1 = crunched data
  10. ;-----------------------------------------------------------------------------
  11.  
  12. ; uses d0-a6
  13.  
  14.  
  15. decrunch:
  16. _l0:        addq    #8,a1            ; Skip ID string & security
  17.                         ; length..
  18.         move.l    a0,a5
  19.         add.l    (a1)+,a0
  20.         add.l    (a1),a1
  21.         moveq    #0,d4
  22.         moveq    #16,d5
  23.         movem.w    (a1),d2/d6/d7
  24.         not.w    d4
  25.         lea    _loff6(pc),a3
  26.         lea    _llen5a(pc),a4
  27.         moveq    #1,d0
  28.         moveq    #-1,d3
  29.         bra.s    _ltest1
  30.  
  31. _lins:        subq.w    #8,d7
  32.         bpl.s    _lins2
  33. _lins1:        move.w    d7,d1
  34.         addq.w    #8,d7
  35.         lsl.l    d7,d6
  36.         move.w    -(a1),d6
  37.         neg.w    d1
  38.         lsl.l    d1,d6
  39.         addq.w    #8,d7
  40.         swap    d6
  41.         move.b    d6,-(a0)
  42.         swap    d6
  43.         cmp.l    a0,a5
  44.         dbhs    d7,_lmain
  45.         bra.s    _lexma
  46.  
  47. _lins2:        rol.w    #8,d6
  48.         move.b    d6,-(a0)
  49. _ltest1:    cmp.l    a0,a5
  50.         dbhs    d7,_lmain
  51. _lexma        bhs.s    _lexit
  52.  
  53. _lmain1:    move.w    -(a1),d6
  54.         moveq    #15,d7
  55. _lmain:        add.w    d6,d6
  56.         bcc.s    _lins
  57.  
  58.         dbf    d7,_llen1
  59.         move.w    -(a1),d6
  60.         moveq    #15,d7
  61. _llen1:        add.w    d6,d6
  62.         bcs.s    _llen6
  63.         dbf    d7,_llen2
  64.         move.w    -(a1),d6
  65.         moveq    #15,d7
  66. _llen2:        moveq    #2,d1
  67.         moveq    #2,d3
  68.         add.w    d6,d6
  69.         bcs.s    _llen5
  70.         dbf    d7,_llen3
  71.         move.w    -(a1),d6
  72.         moveq    #15,d7
  73. _llen3:        add.w    d6,d6
  74.         bcc.s    _llen4
  75.         moveq    #4,d1
  76.         moveq    #6,d3
  77.         lea    _llen3a(pc),a6
  78.         bra.s    _lbits
  79. _llen3a:    add.w    d1,d3
  80.         cmp.w    #15,d1
  81.         blo.s    _loff1
  82.  
  83.         moveq    #5,d1
  84.         moveq    #14,d3
  85.         lea    _llen3b(pc),a6
  86.         bra.s    _lbits
  87.  
  88. _llen4:        moveq    #21,d3
  89. _lloop:        moveq    #8,d1
  90. _llen5:        move.l    a4,a6
  91.         bra.s    _lbits
  92. _llen5a:    add.w    d1,d3
  93.         not.b    d1
  94.         dbeq    d7,_loff2
  95.         bne.s    _loff2a    
  96.         beq.s    _lloop
  97.  
  98. _loff6:        add.w    d1,a2
  99.         move.b    (a2),-(a0)
  100. _lcopy:        move.b    -(a2),-(a0)
  101.         dbf    d3,_lcopy
  102. _ltest:        cmp.l    a0,a5
  103.         dbhs    d7,_lmain
  104.         blo.s    _lmain1
  105. _lexit:        rts
  106.  
  107. _llen6:        dbf    d7,_llen7
  108.         move.w    -(a1),d6
  109.         moveq    #15,d7
  110. _llen7:        add.w    d6,d6
  111.         addx.w    d0,d3
  112. _loff1:        dbf    d7,_loff2
  113. _loff2a:    move.w    -(a1),d6
  114.         moveq    #15,d7
  115. _loff2:        add.w    d6,d6
  116.         bcs.s    _loff3
  117.  
  118.         dbf    d7,_loff4
  119.         move.w    -(a1),d6
  120.         moveq    #15,d7
  121. _loff4:        moveq    #9,d1
  122.         lea    32(a0),a2
  123.         add.w    d6,d6
  124.         bcc.s    _loff5
  125.         moveq    #5,d1
  126.         move.l    a0,a2
  127.         bra.s    _loff5
  128. _loff3:        lea    544(a0),a2
  129.         move.w    d2,d1
  130. _loff5:        move.l    a3,a6
  131.  
  132. _lbits:        and.l    d4,d6
  133.         sub.w    d1,d7
  134.         bpl.s    _lbits2
  135.         add.w    d7,d1
  136.         lsl.l    d1,d6
  137.         move.w    d7,d1
  138.         move.w    -(a1),d6
  139.         neg.w    d1
  140.         add.w    d5,d7
  141. _lbits2:    lsl.l    d1,d6
  142.         move.l    d6,d1
  143.         swap.w    d1
  144.         jmp    (a6)
  145.  
  146. _lpins2:    moveq    #-1,d3
  147.         bra.w    _lins2
  148.  
  149. _l2ins2:    rol.w    #8,d6
  150.         move.b    d6,-(a0)
  151. _l2ins1:    lsl.l    d7,d6
  152.         move.w    -(a1),d6
  153.         lsl.l    d1,d6
  154.         swap    d6
  155.         move.b    d6,-(a0)
  156.         swap    d6
  157.         subq.w    #2,d3
  158.         bgt.s    _l2ins2
  159.         beq.s    _lpins2
  160.         addq.w    #8,d7
  161.         bra.s    _ltest
  162.  
  163. _llen3b:    add.w    d1,d3
  164.         move.b    _lnewd1(pc,d7),d1
  165.         bpl.s    _l2ins1
  166.         subq.w    #8,d7
  167.         dbf    d3,_l2ins2
  168.  
  169. _lnewd1:    dc.b    $08,$07,$06,$05,$04,$03,$02,$01
  170.         dc.b    $88,$87,$86,$85,$84,$83,$82,$81
  171.